//
// Created by postgres on 7/29/17.
//
#include "stdio.h"
#include "../include/09sort/losertree.h"
#define k 5
#define  Datatype int
#define MinValue -99999
void Adjust(Datatype node[],Datatype leaves[],int n){
    int i;
    Datatype temp;
    for(i=(n+k)/2;i>0;i=i/2){
        if(leaves[n]>leaves[node[i]]){
            temp=node[i];
            node[i]=n;
            n=temp;
        }
    }
    if(node[0]==k||leaves[n]<leaves[node[0]])
        node[0]=n;

}

void Create_losertree(Datatype node[],Datatype leaves[]){
    int i;
    for( i=0;i<k;i++){//设置ls败者的初值都为k， k位置的关键字已经设置为了-1，
        node[i]=k;
    }
   for( i=k-1;i>=0;i--){//一次从存储点第一个关键词开始进行调整
        Adjust(node,leaves,i);
    }
    /* for( i=0;i<k;i++){//一次从存储点第一个关键词开始进行调整
         Adjust(node,leaves,i);
     }*/
    //leaves[3]=13;
    //Adjust(node,leaves,3);
}
void LoserTree_test(){
    Datatype node[k];
    Datatype leaves[k+1]={10,9,20,15,12};//存放带归并段的关键字，;
    leaves[k]=MinValue;
    int i;
    Create_losertree(node,leaves);//建立败者树，，这个最好用图画出来比较好理解
    leaves[4]=15;
    Adjust(node,leaves,4);
    i=1001;
}